﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Maticsoft.DBUtility;
using System.Data;

namespace QunYing.DAL
{
    public partial class DeviceRealTimeInfo
    {
        /// <summary>
        /// 获得数据列表(每天一笔)
        /// </summary>
        public DataSet GetListByOne(string strWhere)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("SELECT * FROM V_DeviceRealTimeInfo ");
            if (strWhere.Trim() != "")
            {
                strSql.Append(" where " + strWhere);
            }
            return DbHelperSQL.Query(strSql.ToString());
        }
        /// <summary>
        /// 获得报警信息CS
        /// </summary>
        public DataSet GetWarnForCS(string Dealer, DateTime time, bool isDealer)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append(@"SELECT a.* FROM V_DeviceRealTimeInfo a
                            left JOIN dbo.ICSA_Device b on a.设备ID=b.ICSA设备ID
                            WHERE a.数据接收时间>='" + time + "'");
            if (isDealer)
            {
                strSql.Append(" AND b.所属经销商='" + Dealer + "'");
            }
            strSql.Append(" order by a.数据接收时间 DESC");
            return DbHelperSQL.Query(strSql.ToString());
        }
        /// <summary>
        /// 获得所有报警信息CS
        /// </summary>
        public DataSet GetAllWarnForCS(string Dealer, DateTime time, bool isDealer)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append(@"SELECT a.* FROM DeviceRealTimeInfo a
                            left JOIN dbo.ICSA_Device b on a.设备ID=b.ICSA设备ID
                            WHERE a.数据接收时间>='" + time + "'");
            if (isDealer)
            {
                strSql.Append(" AND b.所属经销商='" + Dealer + "'");
            }
            strSql.Append(" order by a.数据接收时间 DESC");
            return DbHelperSQL.Query(strSql.ToString());
        }
        /// <summary>
        /// 报警信息
        /// </summary>
        /// <param name="strUserName"></param>
        /// <returns></returns>
        public DataTable QueryWarn(string strUserName, string strIcsa, DateTime startDate, DateTime endDate)
        {
            SqlParameter[] parameters = {
					new SqlParameter("@用户ID",strUserName),
                    new SqlParameter("@ICSA",strIcsa),
                    new SqlParameter("@开始时间",startDate),
                    new SqlParameter("@结束时间",endDate)
             };
            return DbHelperSQL.RunProcedure("P_QueryWarn", parameters, "result").Tables[0];
        }


        /// <summary>
        /// 得到一个对象实体
        /// </summary>
        public QunYing.Model.DeviceRealTimeInfo GetModel(string ID, string time)
        {

            StringBuilder strSql = new StringBuilder();
            strSql.Append("select  top 1 ID,发送号码,用户号码,设备ID,停电告警,PH告警,钙反应器告警,水位告警,ORP告警,反硝器告警,水温告警,温控设备告警,蓄电池告警,水循环告警,氧循环告警,传感器告警,水族箱温度值,水族箱PH值,水族箱ORP值,钙反应器PH值,蓄电池电压,数据发送时间,数据接收时间,告警是否解除,告警解除时间 from DeviceRealTimeInfo ");
            strSql.Append(" where 设备ID=@ID");
            if (!string.IsNullOrEmpty(time))
            {
                strSql.Append(" and CONVERT(varchar(100),数据接收时间, 120)=@time");
            }
            strSql.Append(" order by 数据接收时间 desc");

            DataSet ds = null;
            if (string.IsNullOrEmpty(time))
            {
                SqlParameter[] parameters ={
                        new SqlParameter("@ID", ID)
                };
                ds = DbHelperSQL.Query(strSql.ToString(), parameters);
            }
            else
            {
                SqlParameter[] parameters ={
                        new SqlParameter("@ID", ID),
                        new SqlParameter("@time", time)
                };
                ds = DbHelperSQL.Query(strSql.ToString(), parameters);
            }

            QunYing.Model.DeviceRealTimeInfo model = new QunYing.Model.DeviceRealTimeInfo();
            if (ds.Tables[0].Rows.Count > 0)
            {
                if (ds.Tables[0].Rows[0]["ID"] != null && ds.Tables[0].Rows[0]["ID"].ToString() != "")
                {
                    model.ID = int.Parse(ds.Tables[0].Rows[0]["ID"].ToString());
                }
                if (ds.Tables[0].Rows[0]["发送号码"] != null && ds.Tables[0].Rows[0]["发送号码"].ToString() != "")
                {
                    model.发送号码 = ds.Tables[0].Rows[0]["发送号码"].ToString();
                }
                if (ds.Tables[0].Rows[0]["用户号码"] != null && ds.Tables[0].Rows[0]["用户号码"].ToString() != "")
                {
                    model.用户号码 = ds.Tables[0].Rows[0]["用户号码"].ToString();
                }
                if (ds.Tables[0].Rows[0]["设备ID"] != null && ds.Tables[0].Rows[0]["设备ID"].ToString() != "")
                {
                    model.设备ID = ds.Tables[0].Rows[0]["设备ID"].ToString();
                }
                if (ds.Tables[0].Rows[0]["停电告警"] != null && ds.Tables[0].Rows[0]["停电告警"].ToString() != "")
                {
                    if ((ds.Tables[0].Rows[0]["停电告警"].ToString() == "1") || (ds.Tables[0].Rows[0]["停电告警"].ToString().ToLower() == "true"))
                    {
                        model.停电告警 = true;
                    }
                    else
                    {
                        model.停电告警 = false;
                    }
                }
                if (ds.Tables[0].Rows[0]["PH告警"] != null && ds.Tables[0].Rows[0]["PH告警"].ToString() != "")
                {
                    if ((ds.Tables[0].Rows[0]["PH告警"].ToString() == "1") || (ds.Tables[0].Rows[0]["PH告警"].ToString().ToLower() == "true"))
                    {
                        model.PH告警 = true;
                    }
                    else
                    {
                        model.PH告警 = false;
                    }
                }
                if (ds.Tables[0].Rows[0]["钙反应器告警"] != null && ds.Tables[0].Rows[0]["钙反应器告警"].ToString() != "")
                {
                    if ((ds.Tables[0].Rows[0]["钙反应器告警"].ToString() == "1") || (ds.Tables[0].Rows[0]["钙反应器告警"].ToString().ToLower() == "true"))
                    {
                        model.钙反应器告警 = true;
                    }
                    else
                    {
                        model.钙反应器告警 = false;
                    }
                }
                if (ds.Tables[0].Rows[0]["水位告警"] != null && ds.Tables[0].Rows[0]["水位告警"].ToString() != "")
                {
                    if ((ds.Tables[0].Rows[0]["水位告警"].ToString() == "1") || (ds.Tables[0].Rows[0]["水位告警"].ToString().ToLower() == "true"))
                    {
                        model.水位告警 = true;
                    }
                    else
                    {
                        model.水位告警 = false;
                    }
                }
                if (ds.Tables[0].Rows[0]["ORP告警"] != null && ds.Tables[0].Rows[0]["ORP告警"].ToString() != "")
                {
                    if ((ds.Tables[0].Rows[0]["ORP告警"].ToString() == "1") || (ds.Tables[0].Rows[0]["ORP告警"].ToString().ToLower() == "true"))
                    {
                        model.ORP告警 = true;
                    }
                    else
                    {
                        model.ORP告警 = false;
                    }
                }
                if (ds.Tables[0].Rows[0]["反硝器告警"] != null && ds.Tables[0].Rows[0]["反硝器告警"].ToString() != "")
                {
                    if ((ds.Tables[0].Rows[0]["反硝器告警"].ToString() == "1") || (ds.Tables[0].Rows[0]["反硝器告警"].ToString().ToLower() == "true"))
                    {
                        model.反硝器告警 = true;
                    }
                    else
                    {
                        model.反硝器告警 = false;
                    }
                }
                if (ds.Tables[0].Rows[0]["水温告警"] != null && ds.Tables[0].Rows[0]["水温告警"].ToString() != "")
                {
                    if ((ds.Tables[0].Rows[0]["水温告警"].ToString() == "1") || (ds.Tables[0].Rows[0]["水温告警"].ToString().ToLower() == "true"))
                    {
                        model.水温告警 = true;
                    }
                    else
                    {
                        model.水温告警 = false;
                    }
                }
                if (ds.Tables[0].Rows[0]["温控设备告警"] != null && ds.Tables[0].Rows[0]["温控设备告警"].ToString() != "")
                {
                    if ((ds.Tables[0].Rows[0]["温控设备告警"].ToString() == "1") || (ds.Tables[0].Rows[0]["温控设备告警"].ToString().ToLower() == "true"))
                    {
                        model.温控设备告警 = true;
                    }
                    else
                    {
                        model.温控设备告警 = false;
                    }
                }
                if (ds.Tables[0].Rows[0]["蓄电池告警"] != null && ds.Tables[0].Rows[0]["蓄电池告警"].ToString() != "")
                {
                    if ((ds.Tables[0].Rows[0]["蓄电池告警"].ToString() == "1") || (ds.Tables[0].Rows[0]["蓄电池告警"].ToString().ToLower() == "true"))
                    {
                        model.蓄电池告警 = true;
                    }
                    else
                    {
                        model.蓄电池告警 = false;
                    }
                }
                if (ds.Tables[0].Rows[0]["水循环告警"] != null && ds.Tables[0].Rows[0]["水循环告警"].ToString() != "")
                {
                    if ((ds.Tables[0].Rows[0]["水循环告警"].ToString() == "1") || (ds.Tables[0].Rows[0]["水循环告警"].ToString().ToLower() == "true"))
                    {
                        model.水循环告警 = true;
                    }
                    else
                    {
                        model.水循环告警 = false;
                    }
                }
                if (ds.Tables[0].Rows[0]["氧循环告警"] != null && ds.Tables[0].Rows[0]["氧循环告警"].ToString() != "")
                {
                    if ((ds.Tables[0].Rows[0]["氧循环告警"].ToString() == "1") || (ds.Tables[0].Rows[0]["氧循环告警"].ToString().ToLower() == "true"))
                    {
                        model.氧循环告警 = true;
                    }
                    else
                    {
                        model.氧循环告警 = false;
                    }
                }
                if (ds.Tables[0].Rows[0]["传感器告警"] != null && ds.Tables[0].Rows[0]["传感器告警"].ToString() != "")
                {
                    if ((ds.Tables[0].Rows[0]["传感器告警"].ToString() == "1") || (ds.Tables[0].Rows[0]["传感器告警"].ToString().ToLower() == "true"))
                    {
                        model.传感器告警 = true;
                    }
                    else
                    {
                        model.传感器告警 = false;
                    }
                }
                if (ds.Tables[0].Rows[0]["水族箱温度值"] != null && ds.Tables[0].Rows[0]["水族箱温度值"].ToString() != "")
                {
                    model.水族箱温度值 = decimal.Parse(ds.Tables[0].Rows[0]["水族箱温度值"].ToString());
                }
                if (ds.Tables[0].Rows[0]["水族箱PH值"] != null && ds.Tables[0].Rows[0]["水族箱PH值"].ToString() != "")
                {
                    model.水族箱PH值 = decimal.Parse(ds.Tables[0].Rows[0]["水族箱PH值"].ToString());
                }
                if (ds.Tables[0].Rows[0]["水族箱ORP值"] != null && ds.Tables[0].Rows[0]["水族箱ORP值"].ToString() != "")
                {
                    model.水族箱ORP值 = decimal.Parse(ds.Tables[0].Rows[0]["水族箱ORP值"].ToString());
                }
                if (ds.Tables[0].Rows[0]["钙反应器PH值"] != null && ds.Tables[0].Rows[0]["钙反应器PH值"].ToString() != "")
                {
                    model.钙反应器PH值 = decimal.Parse(ds.Tables[0].Rows[0]["钙反应器PH值"].ToString());
                }
                if (ds.Tables[0].Rows[0]["蓄电池电压"] != null && ds.Tables[0].Rows[0]["蓄电池电压"].ToString() != "")
                {
                    model.蓄电池电压 = decimal.Parse(ds.Tables[0].Rows[0]["蓄电池电压"].ToString());
                }
                if (ds.Tables[0].Rows[0]["数据发送时间"] != null && ds.Tables[0].Rows[0]["数据发送时间"].ToString() != "")
                {
                    model.数据发送时间 = DateTime.Parse(ds.Tables[0].Rows[0]["数据发送时间"].ToString());
                }
                if (ds.Tables[0].Rows[0]["数据接收时间"] != null && ds.Tables[0].Rows[0]["数据接收时间"].ToString() != "")
                {
                    model.数据接收时间 = DateTime.Parse(ds.Tables[0].Rows[0]["数据接收时间"].ToString());
                }
                if (ds.Tables[0].Rows[0]["告警是否解除"] != null && ds.Tables[0].Rows[0]["告警是否解除"].ToString() != "")
                {
                    if ((ds.Tables[0].Rows[0]["告警是否解除"].ToString() == "1") || (ds.Tables[0].Rows[0]["告警是否解除"].ToString().ToLower() == "true"))
                    {
                        model.告警是否解除 = true;
                    }
                    else
                    {
                        model.告警是否解除 = false;
                    }
                }
                if (ds.Tables[0].Rows[0]["告警解除时间"] != null && ds.Tables[0].Rows[0]["告警解除时间"].ToString() != "")
                {
                    model.告警解除时间 = DateTime.Parse(ds.Tables[0].Rows[0]["告警解除时间"].ToString());
                }
                return model;
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 获得图表信息
        /// </summary>
        public DataTable GetChartData(string strICSA, DateTime startDate, DateTime endDate)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select 水族箱温度值,水族箱PH值,水族箱ORP值,钙反应器PH值,蓄电池电压,数据接收时间 ");
            strSql.Append(" into #t FROM DeviceRealTimeInfo ");
            strSql.Append(" where 设备ID=@设备ID and CONVERT(varchar(100), 数据接收时间, 23) between @startDate and @endDate ");
            strSql.Append(@" select t.* from
                            (
                            select TOP (100) PERCENT ta.* from #t ta inner join  
                            ( 
	                            select maxcreateTime = max(数据接收时间), 
	                            datePartOfcreateTime = cast(year(数据接收时间) as char(4)) + '-' 
	                            + cast(month(数据接收时间) as char(2)) + '-' 
	                            + cast(day(数据接收时间) as char(2)) 
	                            FROM #t group by  
	                            cast(year(数据接收时间) as char(4)) + '-' 
	                            + cast(month(数据接收时间) as char(2)) + '-' 
	                            + cast(day(数据接收时间) as char(2)) 
	                            ) temp  on ta.数据接收时间 = temp.maxcreateTime
                            	
                            )t order by t.数据接收时间 DESC");
            SqlParameter[] parameters = {
					new SqlParameter("@设备ID",strICSA),
                    new SqlParameter("@startDate",startDate),
                    new SqlParameter("@endDate",endDate)
             };
            return DbHelperSQL.Query(strSql.ToString(), parameters).Tables[0];
        }
        /// <summary>
        /// 经销商获取报警信息
        /// </summary>
        /// <param name="DealerID">经销商编号</param>
        /// <param name="startDate">开始日期</param>
        /// <param name="endDate">结束日期</param>
        /// <param name="province">所在城市</param>
        /// <param name="strState">处理状态</param>
        /// <returns></returns>
        public DataTable QueryDealerWarn(string DealerID, DateTime startDate, DateTime endDate, string strCity, string strState)
        {
            SqlParameter[] parameters = {
					new SqlParameter("@经销商编号",DealerID),
                    new SqlParameter("@开始时间",startDate),
                    new SqlParameter("@结束时间",endDate),
                    new SqlParameter("@所在城市",strCity),
                    new SqlParameter("@处理状态",strState)
             };
            return DbHelperSQL.RunProcedure("P_QueryDealerWarn", parameters, "result").Tables[0];
        }

        /// <summary>
        /// 经销商主页报警信息
        /// </summary>
        /// <param name="strUserName"></param>
        /// <returns></returns>
        public DataTable QueryDealerIndexWarn(string DealerID, int num)
        {
            SqlParameter[] parameters = {
					new SqlParameter("@经销商编号",DealerID),
                    new SqlParameter("@num",num)
             };
            return DbHelperSQL.RunProcedure("P_QueryDealerIndexWarn", parameters, "result").Tables[0];
        }
        /// <summary>
        /// 接警自动填写信息
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public DataTable P_QueryAutoWarnInfo(string id)
        {
            SqlParameter[] parameters = {
					new SqlParameter("@ID",id)
             };
            return DbHelperSQL.RunProcedure("P_QueryAutoWarnInfo", parameters, "result").Tables[0];
        }
        /// <summary>
        /// 更新处理状态
        /// </summary>
        /// <param name="id"></param>
        /// <param name="state"></param>
        /// <param name="orderID"></param>
        /// <returns></returns>
        public bool UpdateState(string id, string state, string orderID)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("update dbo.DeviceRealTimeInfo set 告警处理状态=@处理状态,告警处理单据ID=@告警处理单据ID");
            strSql.Append(" where ID=@id");
            SqlParameter[] parameters = {
					new SqlParameter("@处理状态",state),
                    new SqlParameter("@告警处理单据ID",orderID),
                    new SqlParameter("@id",id)
             };
            return DbHelperSQL.ExecuteSql(strSql.ToString(), parameters) > 0;
        }


        /// <summary>
        /// 报警数量统计
        /// </summary>
        /// <param name="DealerID"></param>
        /// <returns></returns>
        public DataSet QueryWarnChart(string DealerID, DateTime startDate, DateTime endDate, string isDealer)
        {
            SqlParameter[] parameters = {
					new SqlParameter("@经销商编号", DealerID),
                    new SqlParameter("@startDate", startDate),
                    new SqlParameter("@endDate", endDate),
                    new SqlParameter("@isDealer",isDealer)
              };
            return DbHelperSQL.RunProcedure("P_TotalWarn", parameters, "result");
        }


        public void  UpdataProcessedSatu(string ID)
        {
            string sql = string.Format("update DeviceRealTimeInfo set  告警处理状态='已处理',告警是否解除=1, 告警解除时间=GETDATE()  where ID= '{0}'",ID);
            DbHelperSQL.ExecuteSql(sql);
        }

        public void UpdataProcessedSatu(string icsaID, string dateTime)
        {
            string sql = string.Format("update DeviceRealTimeInfo set  告警处理状态='已处理',告警是否解除=1, 告警解除时间=GETDATE()  where 设备ID= '{0}' and 告警处理状态='未处理'  and 数据接收时间< '{1}'", icsaID, dateTime);
            DbHelperSQL.ExecuteSql(sql);
        }
    }
}
